'''
JSON版本的XPath，从JSON文档中抽取指定信息的工具。
操作符
    $ : 根节点
    @ : 当前节点
    .<节点名称> : 获取子节点
    [<节点名称1>(,<节点名称2>)] : 获取子节点，与点号不同，这里可以获取多个子节点
    * : 匹配所有元素节点
    .. : 获取子孙节点，无论嵌套多少层，都可以获取到
    [<下标1>(,<下标2>)] : 表示一个或多个下标
    [start:end:step] : 表示切片语法
    [?(<表达式>)] : 过滤器表达式，表达式结果必须是布尔值
    () : 支持表达式计算
'''
import json

import jsonpath

json_data = json.load(open('04-json.json'))
# print(f'json内容 :{json_data}')、

# # 所有作者
# authors = jsonpath.jsonpath(json_data, '$.store.book[*].author')
# print(f'全部作者 :{authors}')

# # 第一本书的作者
# author = jsonpath.jsonpath(json_data, '$.store.book[0].author')
# print(f'第一本书的作者 :{author}')


author = jsonpath.jsonpath(json_data, '$.store.book[?(@.isbn)].author')
print(f'有isbn的作者 :{author}')

# 详细教程 https://blog.csdn.net/m0_46159525/article/details/144602164
